/*
题目：数组中数字出现的次数
一个整型数组 nums 里除两个数字之外，其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n)，空间复杂度是O(1)。
 */
public class Offer56 {
    public int[] singleNumbers(int[] nums) {
        int xor = 0;
        for(int num: nums){
            xor ^= num;
        }
        int lowBit = 1;
        //找出最低位的1
        while((xor & lowBit) == 0){
            lowBit <<= 1;
        }
        int[] ans =new int[2];
        for(int num: nums){
            if((num & lowBit) != 0){
                ans[0] ^= num;
            }
        }
        ans[1] = ans[0] ^ xor;
        return ans;
    }
} 
